关于venc output buffer的行为说明

以output buffer size(u32BufSize)为1M,u32MaxStrmCnt=4为例:

Create venc的时候,output buffer(venc-ring-mem)即从mma里被申请好并且整块被映射成连续的虚拟地址。

Encoder从output buffer的起始位置填编码帧,假设放完第4帧,output buffer尾部还剩余空间,encoder也不会接着第5帧,而会从起始位置放第5帧。

假设放完第1or2or3帧,output buffer尾部剩余的size < output buffer size / MaxStrmCnt即250K的时候,encoder也不会在尾部接着放,而会从起始位置放。

假设放完第1or2or3帧,output buffer尾部剩余size大于250K(假设是300K),但是接下来encoder编出了一帧大于300K的帧,那就会出现pack=2的情况,即将这一帧300K放在尾部,剩余放不下的继续从起始位置放。

以上几种情况,当需要继续从起始位置放,但是客户一直没有取流或者取流慢导致第1帧还没有被取走,则encoder会停止编码,直到空间被腾出来。